<html>
<head><meta charset="utf-8"><title>dep-graph design meeting prep · t-compiler · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/index.html">t-compiler</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html">dep-graph design meeting prep</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="179313679"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179313679" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179313679">(Oct 29 2019 at 09:50)</a>:</h4>
<p>Hello <span class="user-mention" data-user-id="116466">@Zoxc</span>, <span class="user-mention" data-user-id="116009">@nikomatsakis</span>, and anyone else from <span class="user-group-mention" data-user-group-id="897">@T-compiler/meeting</span> who is interested! I'd like to prepare for the design meeting this Friday so we can make progress there and hopefully unblock <a href="https://github.com/rust-lang/rust/pull/60035" target="_blank" title="https://github.com/rust-lang/rust/pull/60035">https://github.com/rust-lang/rust/pull/60035</a>.</p>
<p>Here are questions I have:</p>
<ul>
<li>
<p>What does the new file format look like? A comment in the PR mentions</p>
<blockquote>
<p>The dep graph file format is now a list of changes to apply to the dep graph. Each compiler session will just appended the changes it did to the dep graph file.</p>
</blockquote>
<p>I'd like a little bit more detail. Is no part of the existing file overwritten? If so, what does this mean for reading such a file?</p>
</li>
<li>
<p>When and how are changes written to new dep-graph?</p>
</li>
<li>Does this approach involve copying the dep-graph file before modifying it?</li>
<li>Some PR comments mention garbage collection. What exactly is collected? Is the plan to have "garbage collection" compilation sessions that take longer?</li>
</ul>
<p>Maybe it would also help to walk through the steps that happen when trying to execute a query that turns out to be red.</p>



<a name="179317579"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179317579" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179317579">(Oct 29 2019 at 10:46)</a>:</h4>
<blockquote>
<p>I'd like a little bit more detail. Is no part of the existing file overwritten? If so, what does this mean for reading such a file?</p>
</blockquote>
<p>Normally no part of the existing file overwritten, except when garbage collection occurs, then the entire file is rewritten to remove redundant changes.</p>
<p>You'd read such a file from start to finish.</p>



<a name="179317877"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179317877" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179317877">(Oct 29 2019 at 10:50)</a>:</h4>
<blockquote>
<p>When and how are changes written to new dep-graph?</p>
</blockquote>
<p>Changes to the dep graph is buffered and when the buffer is full it is sent to a background worker. That worker then encodes the changes and appends them to the file. When debugging / testing the dep graph, the background worker also builds an in memory copy. When the compiler is done it flushes the buffer and asks for the background worker to finish, and that will also return the in memory copy for use in testing back to the main thread.</p>



<a name="179317915"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179317915" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179317915">(Oct 29 2019 at 10:51)</a>:</h4>
<blockquote>
<p>Does this approach involve copying the dep-graph file before modifying it?</p>
</blockquote>
<p>Yes, but we already copy the entire incremental state, so that's not a regression.</p>



<a name="179318299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179318299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179318299">(Oct 29 2019 at 10:56)</a>:</h4>
<blockquote>
<p>Some PR comments mention garbage collection. What exactly is collected?</p>
</blockquote>
<p>The dep graph file with the list of changes is garbage collected. We can't keep appending to the dep graph file forever, so we need to remove stuff from it at some point. It's probably the simplest implementation of a key value store, we could change it later to something more advanced that doesn't require garbage collection.</p>
<blockquote>
<p>Is the plan to have "garbage collection" compilation sessions that take longer?</p>
</blockquote>
<p>The garbage collection happens in the background thread which loads the dep graph. If there's free CPU cores, it shouldn't affect overall compilation time.</p>



<a name="179320471"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179320471" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179320471">(Oct 29 2019 at 11:30)</a>:</h4>
<p>how is the file encoded? Is it a list of <code>(DepNode, [DepNode]) </code> pairs?</p>



<a name="179320657"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179320657" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179320657">(Oct 29 2019 at 11:34)</a>:</h4>
<p>what's the algorithm for garbage collection? is garbage collection done during each session?</p>



<a name="179321213"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179321213" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179321213">(Oct 29 2019 at 11:44)</a>:</h4>
<p>The file is basically <code>Vec&lt;Action&gt;</code>, <a href="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L341" target="_blank" title="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L341">https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L341</a></p>
<p>When the dep graph is loaded, how much wasted space is calculated, and if it's above a ratio, garbage collection is triggered. Garbage collection reads the dep graph file again and records the byte location of the changes we'd want to keep, combining them if possible. Then it writes the changes  out again.</p>



<a name="179321283"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179321283" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179321283">(Oct 29 2019 at 11:46)</a>:</h4>
<p>GC algorithm: <a href="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L85" target="_blank" title="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L85">https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L85</a><br>
Method which computes what to keep: <a href="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L30" target="_blank" title="https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L30">https://github.com/rust-lang/rust/blob/9f268ad2f5009213d5f33fea02d359536cc89cec/src/librustc/dep_graph/serialized.rs#L30</a></p>



<a name="179323079"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179323079" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179323079">(Oct 29 2019 at 12:16)</a>:</h4>
<p>The dep node result hashes are stored in a separate file as an array indexed by <code>DepNodeIndex</code>and is written each session as it changes more often.</p>



<a name="179327717"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179327717" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179327717">(Oct 29 2019 at 13:22)</a>:</h4>
<blockquote>
<p>The dep node result hashes are stored in a separate file as an array indexed by <code>DepNodeIndex</code>and is written each session as it changes more often.</p>
</blockquote>
<p>So the entire array is loaded into memory (together with the previous dep-graph) and then the entire array is written to disk at the end of the session again, correct?</p>



<a name="179328105"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328105" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328105">(Oct 29 2019 at 13:28)</a>:</h4>
<p>There's 2 arrays, but yes.</p>



<a name="179328129"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328129" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328129">(Oct 29 2019 at 13:28)</a>:</h4>
<p>2 arrays in what sense?</p>



<a name="179328199"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328199" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328199">(Oct 29 2019 at 13:29)</a>:</h4>
<p>that the "old" array is kept around immutably?</p>



<a name="179328320"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328320" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328320">(Oct 29 2019 at 13:30)</a>:</h4>
<p>And the serialized version of the dep-graph is a stream of <code>Action</code> where an <code>Action</code> is a list of additions and updates, with each entry in the list being conceptually <code>{ idx: DepNodeIndex, stable_id: DepNode, deps: [DepNodeIndex] }</code>?</p>



<a name="179328432"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328432" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328432">(Oct 29 2019 at 13:32)</a>:</h4>
<p>Is there a reason that <code>Action</code> is an enum of <code>New</code>, <code>Update</code>, <code>Invalidate</code>? Could it also be just one <code>Set</code> variant, so to speak?</p>



<a name="179328960"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179328960" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179328960">(Oct 29 2019 at 13:40)</a>:</h4>
<blockquote>
<p>that the "old" array is kept around immutably?</p>
</blockquote>
<p>Yeah.</p>
<blockquote>
<p>And the serialized version of the dep-graph is a stream of Action where an Action is a list of additions and updates, with each entry in the list being conceptually { idx: DepNodeIndex, stable_id: DepNode, deps: [DepNodeIndex] }?</p>
</blockquote>
<p>Pretty much.</p>
<blockquote>
<p>Is there a reason that Action is an enum of New, Update, Invalidate? Could it also be just one Set variant, so to speak?</p>
</blockquote>
<p>The <code>Update</code> variant is encoded on disk without the <code>DepNode</code> part, so it's more space efficient.</p>



<a name="179332154"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179332154" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179332154">(Oct 29 2019 at 14:13)</a>:</h4>
<p>do we have a hackmd document anywhere?</p>



<a name="179332168"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179332168" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179332168">(Oct 29 2019 at 14:13)</a>:</h4>
<p>if not, can we create one and start to sketch out the plan based on these notes?</p>



<a name="179336241"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179336241" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179336241">(Oct 29 2019 at 14:51)</a>:</h4>
<blockquote>
<p>The <code>Update</code> variant is encoded on disk without the <code>DepNode</code> part, so it's more space efficient.</p>
</blockquote>
<p>OK, makes sense.</p>



<a name="179342504"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179342504" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179342504">(Oct 29 2019 at 15:48)</a>:</h4>
<p>How does this look to you? <a href="https://hackmd.io/@michaelwoerister/HkbS9CHqS/edit" target="_blank" title="https://hackmd.io/@michaelwoerister/HkbS9CHqS/edit">https://hackmd.io/@michaelwoerister/HkbS9CHqS/edit</a></p>



<a name="179342670"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179342670" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179342670">(Oct 29 2019 at 15:50)</a>:</h4>
<p>Ideally much of the answers to the questions in there would go into the rustc-guide and/or source-level documentation.</p>



<a name="179528168"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528168" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528168">(Oct 31 2019 at 12:56)</a>:</h4>
<p>It looks good, <span class="user-mention" data-user-id="124287">@mw</span> , except that we have no idea what the answers are :)</p>



<a name="179528171"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528171" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528171">(Oct 31 2019 at 12:56)</a>:</h4>
<p>Well, presumably <span class="user-mention" data-user-id="116466">@Zoxc</span> has some thoughts</p>



<a name="179528175"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528175" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528175">(Oct 31 2019 at 12:56)</a>:</h4>
<p>I guess I meant <em>I</em> don't know</p>



<a name="179528431"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528431" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528431">(Oct 31 2019 at 12:59)</a>:</h4>
<p>I added one question, which has to do with a rust-analyzer-like model and live-updates</p>



<a name="179528508"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528508" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528508">(Oct 31 2019 at 13:00)</a>:</h4>
<p><span class="user-mention" data-user-id="124287">@mw</span> -- remind me, with today's incremental, do we completely regenerate the dep-graph every time?</p>
<p>i.e., we load the old dep-graph and then selectively copy over into the new one what we need, then write out the end reuslt?</p>



<a name="179528516"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528516" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528516">(Oct 31 2019 at 13:00)</a>:</h4>
<p>And when/where/how do we use garbage collection today?</p>



<a name="179528528"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528528" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528528">(Oct 31 2019 at 13:00)</a>:</h4>
<p>(Is that in the rustc-guide docs...? I should maybe go check first :)</p>



<a name="179528547"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528547" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528547">(Oct 31 2019 at 13:01)</a>:</h4>
<blockquote>
<p><span class="user-mention silent" data-user-id="124287">mw</span> -- remind me, with today's incremental, do we completely regenerate the dep-graph every time?</p>
<p>i.e., we load the old dep-graph and then selectively copy over into the new one what we need, then write out the end reuslt?</p>
</blockquote>
<p>that is true.</p>



<a name="179528608"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528608" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528608">(Oct 31 2019 at 13:01)</a>:</h4>
<p>the garbage collection happens naturally as part of "selectively copy[ing] over into the new one"</p>



<a name="179528678"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528678" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528678">(Oct 31 2019 at 13:02)</a>:</h4>
<p>ok. If my understanding of what <span class="user-mention" data-user-id="116466">@Zoxc</span> is proposing is correct, I think that this would still be true</p>



<a name="179528692"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528692" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528692">(Oct 31 2019 at 13:02)</a>:</h4>
<p>I'm going to maybe add some notes at the top -- "summary of the proposal"</p>



<a name="179528695"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528695" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528695">(Oct 31 2019 at 13:02)</a>:</h4>
<p>I think that is currently .. well, there is none?</p>



<a name="179528704"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528704" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528704">(Oct 31 2019 at 13:03)</a>:</h4>
<p>maybe there are some comments?</p>



<a name="179528719"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528719" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528719">(Oct 31 2019 at 13:03)</a>:</h4>
<p>yes, please edit the doc, it should be world-writable</p>



<a name="179528900"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528900" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528900">(Oct 31 2019 at 13:05)</a>:</h4>
<p>I'm editing -- another question that occurs to me, regarding motivation -- what are the goals</p>
<ul>
<li>lowering peak memory usage</li>
<li>avoiding some costs?</li>
</ul>



<a name="179528907"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179528907" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179528907">(Oct 31 2019 at 13:06)</a>:</h4>
<p>do we have measurements?</p>



<a name="179529022"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529022" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529022">(Oct 31 2019 at 13:07)</a>:</h4>
<p><span class="user-mention" data-user-id="120989">@nnethercote</span> has done some analysis regarding memory usage</p>



<a name="179529028"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529028" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529028">(Oct 31 2019 at 13:07)</a>:</h4>
<p>that is in the PR</p>



<a name="179529076"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529076" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529076">(Oct 31 2019 at 13:07)</a>:</h4>
<p>we also want to avoid the cost of having to re-write the whole dep-graph.</p>



<a name="179529133"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529133" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529133">(Oct 31 2019 at 13:08)</a>:</h4>
<p>I don't have numbers on that at hand</p>



<a name="179529150"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529150" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529150">(Oct 31 2019 at 13:08)</a>:</h4>
<blockquote>
<p>we also want to avoid the cost of having to re-write the whole dep-graph.</p>
</blockquote>
<p>to be clear, it's not so much that we're <em>avoiding</em> that cost</p>



<a name="179529163"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529163" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529163">(Oct 31 2019 at 13:08)</a>:</h4>
<p>we're just kind of spreading it out over time, right?</p>



<a name="179529172"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529172" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529172">(Oct 31 2019 at 13:08)</a>:</h4>
<p>(and maybe in a background thread)</p>



<a name="179529239"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529239" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529239">(Oct 31 2019 at 13:09)</a>:</h4>
<p>well, only changes are written so the cost of writing the unchanged parts is avoided</p>



<a name="179529277"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529277" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529277">(Oct 31 2019 at 13:09)</a>:</h4>
<p>not sure how exactly garbage collection plays into that</p>



<a name="179529372"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529372" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529372">(Oct 31 2019 at 13:11)</a>:</h4>
<blockquote>
<p>well, only changes are written so the cost of writing the unchanged parts is avoided</p>
</blockquote>
<p>ok I missed that part</p>



<a name="179529410"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529410" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529410">(Oct 31 2019 at 13:11)</a>:</h4>
<p>yes it seems like we would want to begin by explaining exactly how that works</p>



<a name="179529462"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529462" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529462">(Oct 31 2019 at 13:12)</a>:</h4>
<p>it seems like gc is the key question -- i.e., how do we avoid the time to load the old depgraph growing ever longer?</p>



<a name="179529527"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529527" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529527">(Oct 31 2019 at 13:13)</a>:</h4>
<p>yes</p>



<a name="179529619"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529619" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529619">(Oct 31 2019 at 13:14)</a>:</h4>
<p>I'd argue thresholds/quotas is the way to go</p>



<a name="179529621"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529621" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529621">(Oct 31 2019 at 13:14)</a>:</h4>
<p>loading the dep-graph happens in a background, so that becoming more costly won't show as long as it is "fast enough"</p>



<a name="179529669"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529669" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529669">(Oct 31 2019 at 13:15)</a>:</h4>
<p>but writing and loading the dep-graph is not super expensive even now</p>



<a name="179529704"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529704" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529704">(Oct 31 2019 at 13:15)</a>:</h4>
<p>e.g. here we have only a  few percent for each: <a href="https://perf.rust-lang.org/detailed-query.html?commit=c553e8e8812c19809e70523064989e66c5cfd3f1&amp;benchmark=inflate-debug&amp;run_name=clean%20incremental" target="_blank" title="https://perf.rust-lang.org/detailed-query.html?commit=c553e8e8812c19809e70523064989e66c5cfd3f1&amp;benchmark=inflate-debug&amp;run_name=clean%20incremental">https://perf.rust-lang.org/detailed-query.html?commit=c553e8e8812c19809e70523064989e66c5cfd3f1&amp;benchmark=inflate-debug&amp;run_name=clean%20incremental</a></p>



<a name="179529726"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179529726" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179529726">(Oct 31 2019 at 13:15)</a>:</h4>
<p>memory is the bigger issue, I think</p>



<a name="179530166"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179530166" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179530166">(Oct 31 2019 at 13:21)</a>:</h4>
<p>comparing the perf results from May 7 I see largely regressions (though a max of like 8%), but I'm not sure if I'm being misled because of instruction count and parallelism</p>



<a name="179530261"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179530261" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179530261">(Oct 31 2019 at 13:22)</a>:</h4>
<p>walltime seems to show small gains, so perhaps so?</p>



<a name="179530287"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179530287" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179530287">(Oct 31 2019 at 13:22)</a>:</h4>
<p>I can't tell if that's a parallel compiler run</p>



<a name="179530732"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179530732" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179530732">(Oct 31 2019 at 13:28)</a>:</h4>
<p>ok, well, I updated the hackmd to the best of my ability, but there are definitely some areas where <span class="user-mention" data-user-id="116466">@Zoxc</span> would have to weigh in. <span class="user-mention" data-user-id="116466">@Zoxc</span>, if you are able, it'd be great if you could update <a href="https://hackmd.io/9GgAXPtrRSiwBPsI6saa_A?view" target="_blank" title="https://hackmd.io/9GgAXPtrRSiwBPsI6saa_A?view">the hackmd</a> with answers to:</p>
<ul>
<li>what are the differences between the perf runs? </li>
<li>some sketch of the on-disk format and details of what the GC story is<br>
    * if we are only storing "deltas", how do we avoid it constantly growing?</li>
</ul>



<a name="179530845"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179530845" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179530845">(Oct 31 2019 at 13:30)</a>:</h4>
<p><span class="user-mention" data-user-id="124287">@mw</span> by "partial updates", I think you mean things like a rust-analyzer scenario, where we don't do a single "main compilation"?</p>



<a name="179531261"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531261" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531261">(Oct 31 2019 at 13:34)</a>:</h4>
<p>ok, I made a few more updates, coallescing some questions and leaving some notes that I <em>think</em> are accurate</p>



<a name="179531267"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531267" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531267">(Oct 31 2019 at 13:34)</a>:</h4>
<p>I'm done for now :)</p>



<a name="179531361"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531361" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531361">(Oct 31 2019 at 13:35)</a>:</h4>
<p>with partial updates I mean mainly updating the incremental cache for compilation sessions that error</p>



<a name="179531429"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531429" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531429">(Oct 31 2019 at 13:36)</a>:</h4>
<p>this question is not a high priority for me though.</p>



<a name="179531431"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531431" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531431">(Oct 31 2019 at 13:36)</a>:</h4>
<p>ah yes very good</p>



<a name="179531448"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531448" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531448">(Oct 31 2019 at 13:36)</a>:</h4>
<p>I hadn't thought about it but that is indeed kind of a "special case" of the rust-analyzer scenario, isn't it?</p>



<a name="179531469"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531469" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531469">(Oct 31 2019 at 13:37)</a>:</h4>
<p>I guess so, yes.</p>



<a name="179531519"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531519" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531519">(Oct 31 2019 at 13:37)</a>:</h4>
<p>there are probably some additional questions about correctness in any "partial update" scenario</p>



<a name="179531586"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531586" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531586">(Oct 31 2019 at 13:38)</a>:</h4>
<p>(did we get rid of query cycles yet? I hope so <code>:)</code>)</p>



<a name="179531653"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531653" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531653">(Oct 31 2019 at 13:39)</a>:</h4>
<p>hey <span class="user-mention" data-user-id="124287">@mw</span> did I show you <code>cyclotron</code>? it's a memoizer, that computes fixpoints when it hits cycles :)</p>



<a name="179531672"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531672" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531672">(Oct 31 2019 at 13:39)</a>:</h4>
<p>probably too inefficient/silly to use in the compiler, and potentially unsound in certain situations</p>



<a name="179531766"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179531766" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179531766">(Oct 31 2019 at 13:40)</a>:</h4>
<p>works for fixing left-recursion in parsing though,,,</p>



<a name="179534792"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179534792" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179534792">(Oct 31 2019 at 14:14)</a>:</h4>
<blockquote>
<p>did I show you <code>cyclotron</code>? it's a memoizer, that computes fixpoints when it hits cycles :)</p>
</blockquote>
<p>I've debated about this for salsa -- this is of course kind of what trait solving winds up doing -- but I don't think it's correct in all cases</p>



<a name="179535203"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179535203" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179535203">(Oct 31 2019 at 14:18)</a>:</h4>
<p>trait solving is also probably more efficient at computing those fixpoints, whereas all I do is repeat the "head" of the cycle until it stops changing</p>



<a name="179536011"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179536011" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zoxc <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179536011">(Oct 31 2019 at 14:26)</a>:</h4>
<blockquote>
<p>move to a rust-analyzer like model, with live updates</p>
</blockquote>
<p>I'm not sure what this entails</p>



<a name="179625561"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179625561" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179625561">(Nov 01 2019 at 13:27)</a>:</h4>
<blockquote>
<p>trait solving is also probably more efficient at computing those fixpoints, whereas all I do is repeat the "head" of the cycle until it stops changing</p>
</blockquote>
<p>yes, although there are prolog impl's that take that approach</p>



<a name="179626008"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626008" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626008">(Nov 01 2019 at 13:32)</a>:</h4>
<p>there's something in this conversation that may be obvious but I don't think anyone's pointed it out explicitly:</p>



<a name="179626026"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626026" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626026">(Nov 01 2019 at 13:33)</a>:</h4>
<p>some have noted the primary driver for the work is to reduce memory usage (or at least peak memory usage?)</p>



<a name="179626114"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626114" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626114">(Nov 01 2019 at 13:34)</a>:</h4>
<p>the reason this is a memory usage issue, if I understand correctly, is that we have two graphs (that are likely to be approximately the same size and shape) in memory at once</p>



<a name="179626147"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626147" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626147">(Nov 01 2019 at 13:34)</a>:</h4>
<p>and therefore the "best" improvement in memory usage one could hope to achieve is to <em>halve</em> the impact in mem usage from incremental compilation</p>



<a name="179626186"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626186" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626186">(Nov 01 2019 at 13:35)</a>:</h4>
<p>do I have that right? (I'm not saying that a 50% reduction is not worthwhile! but I just want to make sure I understand.)</p>



<a name="179626358"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626358" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626358">(Nov 01 2019 at 13:37)</a>:</h4>
<p>I believe that is correct, <span class="user-mention" data-user-id="116083">@pnkfelix</span></p>



<a name="179626445"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626445" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626445">(Nov 01 2019 at 13:38)</a>:</h4>
<p><span class="user-mention" data-user-id="124287">@mw</span> with respect to how garbage collection works... <span class="user-mention" data-user-id="116466">@Zoxc</span> wrote this:</p>
<blockquote>
<p>The garbage collection algorithm reads the dep graph and records the location of information we want to keep. It then clears the file and writes only the useful information back. It is precise and happens in the background thread. The cost of garbage collection is similar to loading the dep graph, so it’s unlikely we’ll block on it.</p>
</blockquote>
<p>I think what this means (<span class="user-mention" data-user-id="116466">@Zoxc</span> can confirm) is that we:</p>
<ul>
<li>load the previous dep-graph</li>
<li>do a "mark"-phase by walking from the root node of the graph to find all its transitive dependencies</li>
<li>anything not marked can be deleted</li>
</ul>



<a name="179626460"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626460" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626460">(Nov 01 2019 at 13:39)</a>:</h4>
<p>one thing I did not yet fully understand -- is the dep-graph stored in one big file that we (ordinarily) append to?</p>



<a name="179626464"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626464" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626464">(Nov 01 2019 at 13:39)</a>:</h4>
<p>and -- if we do a GC -- we fully rewrite it?</p>



<a name="179626484"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626484" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626484">(Nov 01 2019 at 13:39)</a>:</h4>
<p>Basically, one thing I would like to spend time on in the meeting is <a href="https://hackmd.io/9GgAXPtrRSiwBPsI6saa_A#What-does-the-on-disk-format-look-like" target="_blank" title="https://hackmd.io/9GgAXPtrRSiwBPsI6saa_A#What-does-the-on-disk-format-look-like">the on-disk format</a>, which is still not really covered at all</p>



<a name="179626620"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626620" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626620">(Nov 01 2019 at 13:41)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> Yes, I was mainly wondering about "case two" in the document: unused nodes. How are those identified?</p>



<a name="179626672"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626672" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626672">(Nov 01 2019 at 13:42)</a>:</h4>
<p><span class="user-mention" data-user-id="124287">@mw</span> presumably they are just not marked?</p>



<a name="179626676"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626676" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626676">(Nov 01 2019 at 13:42)</a>:</h4>
<p>that's basically how it works today, no?</p>



<a name="179626679"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626679" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626679">(Nov 01 2019 at 13:42)</a>:</h4>
<p>Are they reliably "invalidated" somewhere else?</p>



<a name="179626694"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626694" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626694">(Nov 01 2019 at 13:42)</a>:</h4>
<p>except that the "marking" is done "on the fly"</p>



<a name="179626713"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626713" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626713">(Nov 01 2019 at 13:42)</a>:</h4>
<p>I tried to find something in the PR that looks like such a marking phase, but I cannot find it</p>



<a name="179626732"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626732" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626732">(Nov 01 2019 at 13:43)</a>:</h4>
<p>well, is the GC scheme implemented?</p>



<a name="179626746"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626746" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626746">(Nov 01 2019 at 13:43)</a>:</h4>
<p>yes, here: <a href="https://github.com/rust-lang/rust/pull/60035/files#diff-ad7502063d3dee7dc215765da3e83c58R85" target="_blank" title="https://github.com/rust-lang/rust/pull/60035/files#diff-ad7502063d3dee7dc215765da3e83c58R85">https://github.com/rust-lang/rust/pull/60035/files#diff-ad7502063d3dee7dc215765da3e83c58R85</a></p>



<a name="179626839"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626839" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626839">(Nov 01 2019 at 13:44)</a>:</h4>
<p>I can see how this takes care of overwritten nodes, but I'm not sure how unreferenced nodes are handled</p>



<a name="179626937"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626937" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626937">(Nov 01 2019 at 13:46)</a>:</h4>
<p>I do see bits of code in the PR that seem like its looping over all the nodes and setting their state to <code>DepNodeState::Invalid</code>; I would think this is like setting all the mark-bits to "unmarked" in a normal GC?</p>



<a name="179626976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179626976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179626976">(Nov 01 2019 at 13:47)</a>:</h4>
<p>Am I wrong about the purpose of those loops? Or are you just saying you cannot see where they are called (because I will admit that I haven't looked into that yet)</p>



<a name="179627231"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179627231" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179627231">(Nov 01 2019 at 13:50)</a>:</h4>
<p><span class="user-mention" data-user-id="116083">@pnkfelix</span> that could be -- I don't have a clear picture of how things play together exactly</p>



<a name="179627291"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/dep-graph%20design%20meeting%20prep/near/179627291" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/dep-graph.20design.20meeting.20prep.html#179627291">(Nov 01 2019 at 13:51)</a>:</h4>
<p>yeah, I'm clearly in a similar boat. The invalidation loops I was looking at are themselves fired off by <code>Action::InvalidateNodes</code> commands that I infer must be in the file itself ... so I feel like I must have misunderstood their purpose.</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>